
#include "lvgl.h"
#include "test_win.h"
#include "menu_win.h"
#include "usart.h"


/*
 * 此版本程序 界面采用obj窗口+背景、边框修饰方法来优化显示效果
 *																						20221104  1104
 *
*/



LV_FONT_DECLARE(major_font_30);//声明字体  标题栏
LV_FONT_DECLARE(major_font_24);//声明字体  正文
LV_FONT_DECLARE(major_font_20);//声明字体  正文
LV_FONT_DECLARE(major_font_16);//声明字体  正文

LV_IMG_DECLARE(zc2bit);//声明图片  2bit战车
LV_IMG_DECLARE(dc2);
LV_IMG_DECLARE(dw);
LV_IMG_DECLARE(lb);
LV_IMG_DECLARE(xh);


static lv_obj_t *test_win = NULL;//main_win窗口容器


//内存打印输出
//static void memory_print(void)
//{
//    lv_mem_monitor_t mon;
//    lv_mem_monitor(&mon);
//    printf("used: %6d (%3d %%), frag: %3d %%, biggest free: %6d\n", (int)mon.total_size - mon.free_size,
//                mon.used_pct,
//                mon.frag_pct,
//                (int)mon.free_biggest_size);
//}




//以下屏蔽为测试代码：
//static void event_1_btn_cb(lv_event_t* e)
//{
//	lv_event_code_t code = lv_event_get_code(e);
//	static uint8_t pressed_cnt = 0;
//	static uint8_t pressing_cnt = 0;
//	char buf[15];
//	if (LV_EVENT_PRESSED == code) {
//		pressed_cnt++;
//		printf("pressed\r\n");
//	}
//	else if (LV_EVENT_PRESSING == code) {
//		pressing_cnt++;
//		printf("pressing\r\n");
//	}
//	//lv_snprintf(buf, sizeof(buf), "Buttom %d %d", pressed_cnt, pressing_cnt);
//	//lv_label_set_text((lv_obj_t*)e->user_data, buf);
//}



//static void btn_toggle_event_cb(lv_event_t * e)
//{
//    lv_obj_t * obj = lv_event_get_target(e);        // 获取触发事件的部件(对象)
//    lv_event_code_t code = lv_event_get_code(e);    // 获取当前部件(对象)触发的事件代码

//    switch(code){
//        case LV_EVENT_VALUE_CHANGED:
//            printf("LV_EVENT_VALUE_CHANGED\n");
//            break;
//        default:
//            //printf("NONE\n");
//            break;
//    }
//}

////下拉列表汉字测试
//static void dd_event_handler(lv_event_t * e)
//{
//    lv_event_code_t code = lv_event_get_code(e);
//    lv_obj_t *obj = lv_event_get_target(e);

//    if (code == LV_EVENT_VALUE_CHANGED)
//    {
//        LV_LOG_USER("%d", lv_dropdown_get_selected(obj));       // 获取选项的索引值，从0开始
//        char tmp_buf[32];
//        lv_dropdown_get_selected_str(obj, tmp_buf, sizeof(tmp_buf)); // 获取选项的内容
//        LV_LOG_USER("%s", tmp_buf);
//    }
//    else if(code == LV_EVENT_CLICKED)
//    {
//    	// 【方法2】在运行时进行修改
//        // 改变下拉列表中列表的样式
//        // 这些修改可以在初始化的时候就设置好，你也可以像下面这样动态地修改样式
//        lv_obj_t * dd_list = lv_dropdown_get_list(obj);
//        if(dd_list != NULL)
//        {
//            // 需要在 lv_conf.h 中打开宏 LV_FONT_MONTSERRAT_28，要使用其他内置字体同理
//            // 注意：如果你初始化时使用了中文字库，并且设置了中文选项，这里设置之后内容将不能展示出来
//            lv_obj_set_style_text_font(dd_list, &major_font_24, 0);

//            // 修改列表的背景颜色
//            // 这里只修改颜色，你还可以修改其他样式属性
//            //lv_obj_set_style_bg_color(dd_list, lv_color_hex(0xc43e1c), 0);
//            //lv_obj_set_style_bg_color(dd_list, lv_color_hex(0xc43e1c), LV_PART_MAIN); // 这样写和上面那个是一样的

//            // 修改滚动条的样式
//            // 这里只修改颜色，你还可以修改其他样式属性
//            lv_obj_set_style_border_color(dd_list, lv_color_hex(0xcc3e1c), LV_PART_SCROLLBAR);

//            // 修改当按下、选中或按下+选中选项时的样式
//            // 这里只修改颜色，你还可以修改其他样式属性
//            lv_obj_set_style_bg_color(dd_list, lv_color_hex(0xafbeac), LV_PART_SELECTED);
//					
//						//lv_obj_set_style_text_font(dd_list, &major_font_24, 0);        // 设置标签文本

//        }
//    }
//}
		
	
//		//创建下拉列表
//		lv_obj_t * dropdownlist = lv_dropdown_create(test_win);//创建下拉列表
//		lv_obj_t * dd_list = lv_dropdown_get_list(dropdownlist);//获取列表对象
//		lv_obj_set_pos(dropdownlist,20,10);
//		lv_obj_set_style_text_font(dropdownlist, &major_font_24, 0);// 下拉列表设置新的字体
//		lv_obj_set_style_text_font(dd_list, &major_font_24, 0);  //下拉列表的列表对象设置新字体
//    lv_dropdown_set_options(dropdownlist, "单兵\n坦克\n搭乘\n自动步枪"); 
//		//lv_dropdown_set_options(dropdownlist, "1\n2\n3\n4"); 
//		lv_dropdown_set_selected(dropdownlist, 1);//设置默认选项
//		//lv_obj_add_event_cb(dropdownlist, dd_event_handler, LV_EVENT_ALL, NULL);//设置回调函数


		/* 创建表格*/
		/* 创建 table 部件 */
//		lv_obj_t* table = lv_table_create(test_win);	
//		lv_obj_set_style_text_font(table, &major_font_16, 0);// 下拉列表设置新的字体

//		/* 设置 table 部件的单元格文本 */

//		lv_table_set_row_cnt(table,2);
//		lv_table_set_col_cnt(table,2);
//		lv_table_set_cell_value(table, 0, 0, "坦克.0001");//obj,row行,col列,text
//		//lv_table_set_cell_value(table, 0, 1, "单兵");//obj,row,col,text   font
////		lv_table_set_cell_value(table, 1, 0, "身份.红军\n模式.训练\n油量.50L");//obj,row,col,text
////		lv_table_set_cell_value(table, 1, 1, "武器类型\n弹种.训练\n弹量.50L");//obj,row,col,text
//		lv_obj_center(table);
//		lv_obj_set_pos(table,0,0);


//		//创建矩阵键盘
//		static const char * map[] = {"弹药信息 ", "工况信息 ", "成员信息 ", "\n", "状态信息 ", "火工品 ", "伤情信息 ","\n","定位信息 ","演习参数 ","关于 ",NULL};		
//		lv_obj_t * btnm = lv_btnmatrix_create(test_win);
//		lv_obj_set_style_text_font(btnm, &major_font_16, 0);// 下拉列表设置新的字体
//		lv_btnmatrix_set_map(btnm, map);
//		lv_obj_set_pos(btnm,0,80);//设置位置
//		lv_obj_set_size(btnm,290,290);//设置整个控件大小
//		lv_obj_set_style_pad_row(btnm, 15, LV_PART_MAIN);//设置间隙宽度
//		lv_obj_set_style_pad_column(btnm, 15, LV_PART_MAIN);//设置间隙宽度




//定时器回调
void my_timer_cb(lv_timer_t * timer)
{
  /*Use the user_data*/

  //printf("my_timer called \n");

  /*Do something with LVGL*/

}



static void P0_event_btn_m_cb(lv_event_t* e)
{
	  lv_obj_t * obj = lv_event_get_target(e);        // 获取触发事件的部件(对象)
    lv_event_code_t code = lv_event_get_code(e);    // 获取当前部件(对象)触发的事件代码

    switch(code){
        case LV_EVENT_VALUE_CHANGED:
            printf("LV_EVENT_VALUE_CHANGED\n");
            break;
				
				case LV_EVENT_RELEASED:
						printf("released\r\n");			
						lv_obj_del(test_win);
						menu_win_create();
				
						break;
        default:
            //printf("NONE\n");
            break;
    }
}





//此界面用作控件测试
void test_win_create()
{
	printf("test win creat\r\n");
	
	static lv_style_t obj_style;
  lv_style_reset(&obj_style);
  lv_style_init(&obj_style); // 样式初始化
  lv_style_set_radius(&obj_style, 0); // 设置样式圆角弧度  

	test_win = lv_obj_create(lv_scr_act());  // 创建一个屏幕来模拟容器---->有20像素边框

//	test_win = lv_obj_create(NULL);  // 创建一个屏幕来  此方式必须添加下面代码，否则无显示
//	lv_scr_load(test_win);//加载屏幕  --->  删除使用此方法创建的界面时，log报warning 
	
	
	//创建一个定时器用于测试---->测试时 定时器应该放在外面，如果删除此界面在创建，定时器会在未删除的情况下再次创建造成内存泄漏
	//lv_timer_t * mytimer =  lv_timer_create(my_timer_cb, 1000, NULL);//
	
	
	
	if(test_win != NULL)//创建成功
	{
		printf("test win create success\r\n");
		//设置窗口特性
		lv_obj_set_style_pad_all(test_win,0,0);//padding改为0  消除20像素内缩
    //lv_obj_set_style_bg_color(test_win, lv_palette_main(LV_PALETTE_NONE), 0);//不设置背景色就默认白色
		
    lv_obj_set_size(test_win, 320, 480);
    lv_obj_add_style(test_win, &obj_style, 0);
		lv_obj_set_scrollbar_mode(test_win,LV_SCROLLBAR_MODE_OFF);//不显示滚动条
		
		
		//下面创建放置文本的容器框
		//设置特性
		static lv_style_t text_win_style;//obj1放置文本
    lv_style_reset(&text_win_style);
    lv_style_init(&text_win_style); // 样式初始化
		
		//为此界面的对象放置文本的容器框统一设置样式
    lv_style_set_radius(&text_win_style, 3); // 设置样式圆角弧度
    lv_style_set_bg_color(&text_win_style,lv_palette_lighten(LV_PALETTE_GREY,4));//设置背景颜色
    lv_style_set_border_width(&text_win_style, 2);//边框
    lv_style_set_border_color(&text_win_style,lv_palette_main(LV_PALETTE_BLUE_GREY));
    lv_style_set_outline_width(&text_win_style,2);//外边框
		lv_style_set_outline_color(&text_win_style,lv_palette_main(LV_PALETTE_BLUE_GREY));

	  lv_obj_t * textwin_1 = lv_obj_create(test_win);//创建一个对象
    lv_obj_set_style_pad_all(textwin_1,0,0); //padding 改为0
    lv_obj_set_scrollbar_mode(textwin_1,LV_SCROLLBAR_MODE_OFF);//不显示滚动条    
    lv_obj_set_size(textwin_1, 157, 50);//x,y
    lv_obj_set_pos(textwin_1,1,1);//x,y
		lv_obj_add_style(textwin_1, &text_win_style, 0);//设置特性

	  lv_obj_t * textwin_2 = lv_obj_create(test_win);//创建一个对象
    lv_obj_set_style_pad_all(textwin_2,0,0); //padding 改为0
    lv_obj_set_scrollbar_mode(textwin_2,LV_SCROLLBAR_MODE_OFF);//不显示滚动条    
    lv_obj_set_size(textwin_2, 157, 50);//x,y
    lv_obj_set_pos(textwin_2,159,1);//x,y
		lv_obj_add_style(textwin_2, &text_win_style, 0);//设置特性

		lv_obj_t * textwin_3 = lv_obj_create(test_win);//创建一个对象
    lv_obj_set_style_pad_all(textwin_3,0,0); //padding 改为0
    lv_obj_set_scrollbar_mode(textwin_3,LV_SCROLLBAR_MODE_OFF);//不显示滚动条    
    lv_obj_set_size(textwin_3, 157, 80);//x,y
    lv_obj_set_pos(textwin_3,1,51);//x,y
		lv_obj_add_style(textwin_3, &text_win_style, 0);//设置特性

		lv_obj_t * textwin_4 = lv_obj_create(test_win);//创建一个对象
    lv_obj_set_style_pad_all(textwin_4,0,0); //padding 改为0
    lv_obj_set_scrollbar_mode(textwin_4,LV_SCROLLBAR_MODE_OFF);//不显示滚动条    
    lv_obj_set_size(textwin_4, 157, 80);//x,y
    lv_obj_set_pos(textwin_4,159,51);//x,y
		lv_obj_add_style(textwin_4, &text_win_style, 0);//设置特性


		lv_obj_t * textwin_5 = lv_obj_create(test_win);//创建一个对象
    lv_obj_set_style_pad_all(textwin_5,0,0); //padding 改为0
    lv_obj_set_scrollbar_mode(textwin_5,LV_SCROLLBAR_MODE_OFF);//不显示滚动条    
    lv_obj_set_size(textwin_5, 314, 60);//x,y
    lv_obj_set_pos(textwin_5,1,132);//x,y
		lv_obj_add_style(textwin_5, &text_win_style, 0);//设置特性
		
		lv_obj_t * textwin_6 = lv_obj_create(test_win);//创建一个对象
    lv_obj_set_style_pad_all(textwin_6,0,0); //padding 改为0
    lv_obj_set_scrollbar_mode(textwin_6,LV_SCROLLBAR_MODE_OFF);//不显示滚动条    
    lv_obj_set_size(textwin_6, 157, 60);//x,y
    lv_obj_set_pos(textwin_6,1,193);//x,y
		lv_obj_add_style(textwin_6, &text_win_style, 0);//设置特性
		
		lv_obj_t * textwin_7 = lv_obj_create(test_win);//创建一个对象
    lv_obj_set_style_pad_all(textwin_7,0,0); //padding 改为0
    lv_obj_set_scrollbar_mode(textwin_7,LV_SCROLLBAR_MODE_OFF);//不显示滚动条    
    lv_obj_set_size(textwin_7, 157, 60);//x,y
    lv_obj_set_pos(textwin_7,159,193);//x,y
		lv_obj_add_style(textwin_7, &text_win_style, 0);//设置特性


    /* 创建一个btn部件(对象) */
		
		static lv_style_t btn_style;
	  lv_style_reset(&btn_style);
		lv_style_init(&btn_style); // 样式初始化
		
    lv_obj_t * btn_h = lv_btn_create(test_win);       // 创建一个btn部件(对象),他的父对象是活动屏幕对象
		lv_obj_t * btn_m = lv_btn_create(test_win);
		lv_obj_t * btn_r = lv_btn_create(test_win);
    
		// 修改按钮部件（对象）矩形背景部分的样式
    //lv_obj_set_style_bg_color(btn, lv_color_hex(0x1e1e1e), LV_PART_MAIN | LV_STATE_PRESSED);//本地属性
		
		//lv_style_set_bg_color(&btn_style, lv_palette_main(LV_PALETTE_GREEN));//普通样式
		
		lv_style_set_radius(&btn_style, 5);//设置圆角
		//lv_style_set_bg_opa(&btn_style, LV_OPA_COVER);//背景透明
		lv_style_set_bg_color(&btn_style, lv_palette_lighten(LV_PALETTE_BLUE_GREY,3));//背景颜色  lv_palette_main-->调色板
		lv_style_set_border_width(&btn_style, 2);//边框
		lv_style_set_width(&btn_style,80);
		lv_style_set_height(&btn_style,50);
//		lv_obj_set_height(btn,50);//not use
//		lv_obj_set_width(btn,50);
		
			lv_obj_set_align(btn_h,LV_ALIGN_BOTTOM_LEFT);
			lv_obj_set_align(btn_m,LV_ALIGN_BOTTOM_MID);
			lv_obj_set_align(btn_r,LV_ALIGN_BOTTOM_RIGHT);

    // 打开了 LV_OBJ_FLAG_CHECKABLE ，当对象被点击时有选中切换(Toggle)状态的效果
    // 其触发的是 LV_EVENT_VALUE_CHANGED 事件类型
    //lv_obj_add_flag(btn, LV_OBJ_FLAG_CHECKABLE);--->添加后颜色反转
    // 处理 LV_EVENT_VALUE_CHANGED 事件类型示例
    //lv_obj_add_event_cb(btn, btn_toggle_event_cb, LV_EVENT_VALUE_CHANGED, NULL);		
		//lv_obj_add_style(btn, &btn_style, LV_PART_INDICATOR|LV_STATE_DEFAULT);  //默认状态下更改指示器的样式
		
		
		//给菜单键添加回调函数
		lv_obj_add_event_cb(btn_m, P0_event_btn_m_cb, LV_EVENT_RELEASED, NULL);
				
		lv_obj_add_style(btn_h, &btn_style, 0);
		lv_obj_add_style(btn_m, &btn_style, 0);
		lv_obj_add_style(btn_r, &btn_style, 0);

		//给3个按键添加文本
		lv_obj_t *label_h = lv_label_create(btn_h); // 创建标签文本	
		//lv_obj_set_pos(label_h,140,300);		
		lv_obj_set_style_text_font(label_h, &major_font_24, 0);        // 设置标签文本
		lv_label_set_text(label_h, "主页"); // 设置文本

		lv_obj_t *label_m = lv_label_create(btn_m); // 创建标签文本	
	//	lv_obj_set_pos(label_h,140,300);		
		lv_obj_set_style_text_font(label_m, &major_font_24, 0);        // 设置标签文本
		lv_label_set_text(label_m, "菜单"); // 设置文本
		
		lv_obj_t *label_r = lv_label_create(btn_r); // 创建标签文本	
		//lv_obj_set_pos(label_h,140,300);		
		lv_obj_set_style_text_font(label_r, &major_font_24, 0);        // 设置标签文本
		lv_label_set_text(label_r, "返回"); // 设置文本

		

		//创建图片
		 
	  lv_obj_t* img = lv_img_create(test_win);             /* 定义并创建图像 */
    lv_img_set_src(img, &zc2bit);                        /* 填充图像 */
    lv_obj_align(img, LV_ALIGN_TOP_MID, 0, 260);         /* 设置图像位置 */   


		lv_obj_t* img1 = lv_img_create(test_win);
		lv_img_set_src(img1,&dw);//定位
		lv_obj_align(img1,LV_ALIGN_TOP_MID,20,5);
		
		lv_obj_t* img2 = lv_img_create(test_win);
		lv_img_set_src(img2,&xh);//信号
		lv_obj_align(img2,LV_ALIGN_TOP_MID,60,5);

		lv_obj_t* img3 = lv_img_create(test_win);
		lv_img_set_src(img3,&lb);//列表
		lv_obj_align(img3,LV_ALIGN_TOP_MID,100,5);

		lv_obj_t* img4 = lv_img_create(test_win);
		lv_img_set_src(img4,&dc2);//电池
		lv_obj_align(img4,LV_ALIGN_TOP_MID,140,5);


	//		//创建标签文本
		lv_obj_t *label_9 = lv_label_create(test_win); // 创建标签文本	
		lv_obj_set_pos(label_9,140,320);		
		lv_obj_set_style_text_font(label_9, &major_font_24, 0);        // 设置标签文本
		lv_label_set_text(label_9, "载员数.5"); // 设置文本


		lv_obj_t *label_1 = lv_label_create(test_win); // 创建标签文本	
		lv_obj_set_pos(label_1,2,8);		
		lv_obj_set_style_text_font(label_1, &major_font_24, 0);        // 设置标签文本
		lv_label_set_text(label_1, "坦克.0001"); // 设置文本
		
		lv_obj_t *label_2 = lv_label_create(test_win); // 创建标签文本	
		lv_obj_set_pos(label_2,2,54);		
		lv_obj_set_style_text_font(label_2, &major_font_24, 0);        // 设置标签文本
		lv_label_set_text(label_2, "身份.红军\n模式.训练\n油量.50L"); // 设置文本
		
		lv_obj_t *label_3 = lv_label_create(test_win); // 创建标签文本	
		lv_obj_set_pos(label_3,162,54);		
		lv_obj_set_style_text_font(label_3, &major_font_24, 0);        // 设置标签文本
		lv_label_set_text(label_3, "武器类型\n弹种.\n弹量."); // 设置文本
		
		lv_obj_t *label_4 = lv_label_create(test_win); // 创建标签文本	
		lv_obj_set_pos(label_4,2,134);		
		lv_obj_set_style_text_font(label_4, &major_font_24, 0);        // 设置标签文本
		lv_label_set_text(label_4, "伤类.\n伤部."); // 设置文本
		
		
		lv_obj_t *label_5 = lv_label_create(test_win); // 创建标签文本	
		lv_obj_set_pos(label_5,2,194);		
		lv_obj_set_style_text_font(label_5, &major_font_24, 0);        // 设置标签文本
		lv_label_set_text(label_5, "声响弹量.0001"); // 设置文本
		
		
		lv_obj_t *label_6 = lv_label_create(test_win); // 创建标签文本	
		lv_obj_set_pos(label_6,162,194 );		
		lv_obj_set_style_text_font(label_6, &major_font_24, 0);        // 设置标签文本
		lv_label_set_text(label_6, "烟雾罐.黑 白 "); // 设置文本


		lv_obj_t *label_7 = lv_label_create(test_win); // 创建标签文本	
		lv_obj_set_pos(label_7,2,222);		
		lv_obj_set_style_text_font(label_7, &major_font_24, 0);        // 设置标签文本
		lv_label_set_text(label_7, "威胁."); // 设置文本
		
		lv_obj_t *label_8 = lv_label_create(test_win); // 创建标签文本	
		lv_obj_set_pos(label_8,162,222);		
		lv_obj_set_style_text_font(label_8, &major_font_24, 0);        // 设置标签文本
		lv_label_set_text(label_8, "防护."); // 设置文本




	}
}





